package model.comunication;

import java.util.Calendar;
import java.util.List;

import model.Estado_Recado;
import model.Recado;
import model.Usuario;
import model.dba.RecadoDAO;

public class IRecado {
	private RecadoDAO recadoDAO;
	private static IRecado recadoInterface;

	private IRecado() {
		this.recadoDAO = RecadoDAO.getInstance();
	}

	public static IRecado getInstance() {
		if (recadoInterface == null) {
			recadoInterface = new IRecado();
		}
		return recadoInterface;
	}

	/**
	 * Crea el objeto
	 * 
	 * @param emisor
	 * @param receptor
	 * @param estado
	 * @param mensaje
	 * @param fecha
	 * @param asunto
	 *            OPCIONAL
	 * @return
	 */
	public Recado getRecado(Usuario emisor, Usuario receptor, Estado_Recado estado, String mensaje, Calendar fecha, String asunto, String borradoEmisor, String borradoReceptor) {
		return new Recado(emisor, receptor, estado, mensaje, fecha, asunto, borradoEmisor, borradoReceptor);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param id
	 * @param emisor
	 * @param receptor
	 * @param estado
	 * @param mensaje
	 * @param fecha
	 * @param asunto
	 * @return
	 */
	public Recado getRecado(Integer id, Usuario emisor, Usuario receptor, Estado_Recado estado, String mensaje, Calendar fecha, String asunto) {
		return new Recado(id, emisor, receptor, estado, mensaje, fecha, asunto);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param emisor
	 * @param receptor
	 * @return
	 */
	public List<Recado> getRecado(Usuario emisor, Usuario receptor) {
		return this.recadoDAO.get(emisor, receptor);
	}

	public Recado getRecado(Integer id) {
		return this.recadoDAO.get(id);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param emisor
	 * @param estado
	 * @return
	 */
	public List<Recado> getRecado(Usuario emisor, Estado_Recado estado) {
		return this.recadoDAO.get(emisor, estado);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param estado
	 * @param receptor
	 * @return
	 */
	public List<Recado> getRecado(Estado_Recado estado, Usuario receptor) {
		return this.recadoDAO.get(estado, receptor);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param estado
	 * @return
	 */
	public List<Recado> getRecado(Estado_Recado estado) {
		return this.recadoDAO.get(estado);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param estado
	 * @return
	 */
	public List<Recado> getAll() {
		return this.recadoDAO.getAll();
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param recado
	 * @return
	 */
	public Integer addRecado(Recado recado) {
		return this.recadoDAO.add(recado);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param recado
	 * @return
	 */
	public boolean updateRecado(Recado recado) {
		return this.recadoDAO.update(recado);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public boolean deleteRecado(Recado recado) {
		return this.recadoDAO.delete(recado);
	}
}
